import router from './router'
import store from './store'
import { Message } from 'element-ui'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
import { getToken } from '@/utils/auth' // get token from cookie
import getPageTitle from '@/utils/get-page-title'
import {asyncRoutes, constantRoutes} from './router/index'
NProgress.configure({ showSpinner: false }) // NProgress Configuration

const whiteList = ['/login'] // no redirect whitelist

router.beforeEach(async(to, from, next) => {
  // 启动进度条
  NProgress.start()

  // 设置页面标题
  document.title = getPageTitle(to.meta.title)


  // 确定用户是否已登录
  const hasToken = getToken()

  if (hasToken) {
    if (to.path === '/login') {
      // 如果已登录，则重定向到主页
      next({ path: '/' })
      NProgress.done()
    } else {
      const hasGetUserInfo = store.getters.name
      if (hasGetUserInfo) {
        next()
      } else {
        console.log(hasToken)
        try {
          // 获取用户信息
          await store.dispatch('user/getInfo')
          // 获取用户角色
          const role = await store.dispatch('user/getRoles')
          console.log(role)
         
          // 2. 根据角色生成可访问路由图
          // 获取通过权限验证的路由
          const accessRoutes = await store.dispatch('permission/generateRoutes', role) //第二步
          // 生成新的权限列表
          router.options.routes = store.getters.permission_routes
          // 
           router.addRoutes(accessRoutes)
          next({
                   ...to,
                      replace: true
                    })
        } catch (error) {
          // 删除令牌并转到登录页面重新登录
          await store.dispatch('user/resetToken')
          Message.error(error || 'Has Error')
          next(`/login?redirect=${to.path}`)
          NProgress.done()
        }
      }
    }
  } else {
    Message.error('请先进行登录，然后进行后续操作')
    /* 没有令牌*/

    if (whiteList.indexOf(to.path) !== -1) {
      // 在免费登录白名单中，直接进入
      next()
    } else {
      // 其他没有访问权限的页面会重定向到登录页面。
      next(`/login?redirect=${to.path}`)
      NProgress.done()
    }
  }
})


// router.beforeEach(async (to, from, next) => {
//   // start progress bar
//   //开启进度条
//   // NProgress.start()    

//   // 确定用户是否已登录 
//   const hasToken = getToken()

//   // 判断是否存在token,没有就重新登陆
//   if (hasToken) {
//     if (to.path === '/login') {
//       // 如果已登录，则重定向到主页
//       next({
//         path: '/'
//       })
//       NProgress.done()
//     } else {
//       // 确定用户是否通过getInfo获得了权限角色
//       const hasRoles = store.getters.roles && store.getters.roles.length > 0 //这里指的是src/store/getters.js的roles
//       // console.log(hasRoles)
//       //判断是否已经有roles了
//       if (hasRoles) {
//         next(); //当有用户权限的时候，说明所有可访问路由已生成 如访问没权限的全面会自动进入404页面
//       } else {
//         try {
//           // get user info
//           // 注意: roles 角色必须是对象数组! 例如: ['admin'] 或 ,['developer','editor']
//           // 1. 获取roles
//           const data = await store.dispatch('GetInfo') //第一步
//           // var aaa=store.dispatch('GetInfo')
//           // aaa=JSON.parse(aaa);
//     console.log('src/permission.js:'+data.data.roles)
//           // console.log('src/permission.js:'+aaa)
//           // const roles= store.getters.roles;
//           // 2. 根据角色生成可访问路由图
//           // 获取通过权限验证的路由
//           const accessRoutes = await store.dispatch('permission/generateRoutes', data.data.roles) //第二步
//           // 3. 更新加载路由
//           router.options.routes = store.getters.permission_routes //第三步
//           // 动态添加可访问路由
//           router.addRoutes(accessRoutes)
//           // console.log(store)
//           // console.log(accessRoutes);
//           // hack方法 确保addRoutes已完成，以确保地址是完整的
//           // 设置replace: true，这样导航就不会留下历史记录
//           next({
//             ...to,
//             replace: true
//           })
//         } catch (error) {
//           // 删除token并转到登录页面重新登录
//           await store.dispatch('FedLogOut')
//           Message.error('出现错误~请重新登录')
//           next(`/login?redirect=${to.path}`)
//           NProgress.done()
//         }
//       }
//     }
//   } else {
//     /* 没有token */
//     if (whiteList.indexOf(to.path) !== -1) { // 在免登录白名单，直接进入
//       next()
//     } else {
//       next(`/login?redirect=${to.path}`) // 否则全部重定向到登录页
//       NProgress.done()
//     }
//   }
// })


router.afterEach(() => {
  // finish progress bar
  NProgress.done()
})
